package br.com.websec.xml;

import java.util.ArrayList;
import java.util.Date;

import br.com.websec.agencia.Agencia;
import br.com.websec.agencia.AgenciaRN;
import br.com.websec.banco.Banco;
import br.com.websec.banco.BancoRN;
import br.com.websec.carteira.Carteira;
import br.com.websec.carteira.CarteiraRN;
import br.com.websec.cliente.Cliente;
import br.com.websec.cliente.ClienteRN;
import br.com.websec.conta.Conta;
import br.com.websec.conta.ContaRN;
import br.com.websec.endereco.Endereco;
import br.com.websec.endereco.EnderecoRN;
import br.com.websec.fornecedor.Fornecedor;
import br.com.websec.fornecedor.FornecedorRN;
import br.com.websec.titulo.Titulo;
import br.com.websec.titulo.TituloRN;
import br.com.websec.util.ContextoUtil;

public class TituloXML {
	
	public Titulo populaTituloXML(RemessaXML r) throws Exception{
		
		Titulo t = new Titulo();
		
		//CabecalhoTitulo cTitulo = new CabecalhoTitulo();
	
		// Instanciando classes de negócio para buscar e salvar no banco de dados 
		
		FornecedorRN fRN = new FornecedorRN();
		BancoRN bancoRn = new BancoRN();
		ClienteRN clienteRN = new ClienteRN(); 
		EnderecoRN enderecoRN = new EnderecoRN();
		AgenciaRN aRN = new AgenciaRN();
		ContaRN cRN = new ContaRN();
		CarteiraRN cartRN = new CarteiraRN();
		ClienteRN clRN = new ClienteRN();
		

		Fornecedor f = fRN.buscarPorEmail(ContextoUtil.getContextoBean().getUsuarioLogado().getEmail());
		
		Banco b = bancoRn.buscarPorCodigoBanco(r.getCodigoBanco());
		
		Integer percorreTitulo = 0;
		
		if(b == null){
			throw new Exception("BANCO NAO PODE SER VAZIO");
		}

		for(DetalheXML detalhes: r.getDetalhes()){
			
			
			Agencia a = aRN.buscarPorNumero(r.getDetalhes().get(percorreTitulo).getAgencia());
			
			if (a == null){
				
				a = new Agencia();
				a.setDigito(r.getDigitoAgenciaConta());
				a.setNumero((r.getAgencia()));
				a.setBanco(b);
				
			}
		
			Conta c = cRN.buscarPorNumeroConta(r.getDetalhes().get(percorreTitulo).getConta());
			
			if (c == null){
				
				c = new Conta();
				c.setDigitoConta(r.getConta());
				c.setFornecedor(f);
				c.setAgencia(a);
				c.setDefaultcontacnab('S');
				c.setNumeroConta((r.getConta()));

	
			}
			
								
			Carteira cart = new Carteira();
			cart = cartRN.buscarPorNumeroCarteira(r.getDetalhes().get(percorreTitulo).getCodigoCarteira());
			
			if(cart == null){
				
				cart = new Carteira();
				cart.setCodigoCarteira(r.getDetalhes().get(percorreTitulo).getCodigoCarteira());
				cart.setConta(c);
				cart.setNumeroCarteira(r.getDetalhes().get(percorreTitulo).getCodigoCarteira());
				
			}
			
				
			Cliente cl =  clienteRN.buscarPorCNPJ(detalhes.getCpfCnpjCliente());
			
			if (cl == null) {
				
				cl = new Cliente();			
				cl.setFornecedores(new ArrayList<Fornecedor>());
				cl.getFornecedores().add(f);
				cl.setCnpj(r.getDetalhes().get(percorreTitulo).getCpfCnpjCliente());
				cl.setRazaoSocial(r.getDetalhes().get(percorreTitulo).getRazaoSocialCliente());
				cl.setEmail(r.getDetalhes().get(percorreTitulo).getEmail());
				
			}
			
			Endereco end = enderecoRN.buscarPorCliente(cl.getIdCliente());
			
			if(end == null){
				
				end = new Endereco();
				end.setCliente(cl);
				end.setLogradouro(r.getDetalhes().get(percorreTitulo).getEnderecoCliente());
				end.setBairro(r.getDetalhes().get(percorreTitulo).getBairroCliente());
				end.setCidade(r.getDetalhes().get(percorreTitulo).getCidadeCliente());
				end.setCep(r.getDetalhes().get(percorreTitulo).getCepCliente());
				end.setUf(r.getDetalhes().get(percorreTitulo).getUfCli());
				
				EnderecoRN endRN = new EnderecoRN();
				endRN.salvarEndereco(end);
			}
			
			
			TituloRN tituloRN = new TituloRN();
			
			t = tituloRN.buscarPorFornecedorNumero(r.getDetalhes().get(percorreTitulo).getIdentificacaoTituloEmpresa(), f.getIdFornecedor());
			
			if (t == null){
				
				t = new Titulo();		
				t.setAceite(r.getDetalhes().get(percorreTitulo).getAceite());
				t.setBanco(b);
				t.setFornecedor(f);
				t.setCliente(cl);
				t.setBanco(b);
				t.setConta(c);
				t.setCarteira(cart);
				t.setAceite('S');
				t.setCodigoJuros(r.getDetalhes().get(percorreTitulo).getCodigoJuros());
				t.setCodigoMovimento(r.getDetalhes().get(percorreTitulo).getCodigoMovimento());
				t.setCodigoRejeicoes(r.getDetalhes().get(percorreTitulo).getCodigoRejeicoes());
				t.setDataCredito(r.getDetalhes().get(percorreTitulo).getDataCredito());
				t.setDataDesconto(r.getDetalhes().get(percorreTitulo).getDataDesconto());
				t.setDataLiquidacao(r.getDetalhes().get(percorreTitulo).getDataLiquidacao());
				t.setDataRemessa(r.getDetalhes().get(percorreTitulo).getDataRemRet());
				t.setDigitoNossoNumero(r.getDetalhes().get(percorreTitulo).getDigitoNossoNumero());
				t.setDocumentoCobranca(r.getDetalhes().get(percorreTitulo).getDocumentoCobranca());
				t.setDtEmissao(r.getDetalhes().get(percorreTitulo).getDataEmissaoTitulo());
				t.setDtEnvioBanco(r.getDetalhes().get(percorreTitulo).getDataRemRet());
				t.setDtPagamento(r.getDetalhes().get(percorreTitulo).getDataPagamento());
				t.setDtprorrogacao(r.getDetalhes().get(percorreTitulo).getDataPorrogacao());
				t.setDtVencimento(r.getDetalhes().get(percorreTitulo).getDataVencimentoTitulo());
				t.setDtVencimentoUtil(r.getDetalhes().get(percorreTitulo).getDataVencimentoUtil());
				t.setEspecie(r.getDetalhes().get(percorreTitulo).getEspecieTitulo());
				t.setIdentificacaoTitulo(r.getDetalhes().get(percorreTitulo).getIdentificacaoTitulo());
				t.setIdentificacaoTituloEmpresa(r.getDetalhes().get(percorreTitulo).getIdentificacaoTituloEmpresa());
				t.setInstrucoes(t.getInstrucoes());
				t.setMensagem1(r.getDetalhes().get(percorreTitulo).getMensagem1());
				t.setMensagem2(r.getDetalhes().get(percorreTitulo).getMensagem2());
				t.setNumeroRemessa(r.getDetalhes().get(percorreTitulo).getNrRemRet());
				t.setOcorrencia(r.getDetalhes().get(percorreTitulo).getOcorrencia());
				t.setOutrasInstrucoes(r.getDetalhes().get(percorreTitulo).getOutrasInstrucoes());
				t.setParcela(r.getDetalhes().get(percorreTitulo).getParcela());
				t.setSerie(r.getDetalhes().get(percorreTitulo).getSerie());
				t.setStatus(r.getDetalhes().get(percorreTitulo).getStatus());
				t.setTipoInscricaoCliente(r.getDetalhes().get(percorreTitulo).getTipoInscricaoCliente());
				t.setValor(r.getDetalhes().get(percorreTitulo).getVlrTitulo());
				t.setValorAbatimento(r.getDetalhes().get(percorreTitulo).getValorAbatimento());
				t.setValorAbatimentoCancelado(r.getDetalhes().get(percorreTitulo).getValorAbattimentoCancelado());
				t.setValorDesconto(r.getDetalhes().get(percorreTitulo).getValorDesconto());
				t.setValorDespesa(r.getDetalhes().get(percorreTitulo).getValorDespesa());
				t.setValorIOF(r.getDetalhes().get(percorreTitulo).getValorIOF());
				t.setValorjurosmulta(r.getDetalhes().get(percorreTitulo).getVlrJurosTaxa());
				t.setValorLiquidacaoCredito(r.getDetalhes().get(percorreTitulo).getValorLiquidacaoCredito());
				t.setValorMora(r.getDetalhes().get(percorreTitulo).getValorJurosMulta());
				t.setValorOcorrenciaSacado(r.getDetalhes().get(percorreTitulo).getValorOcorrenciaSacado());
				t.setValorOutrasDespesas(r.getDetalhes().get(percorreTitulo).getValorOutrasDespesas());
				t.setValorOutrosCreditos(r.getDetalhes().get(percorreTitulo).getValorOutrosCreditos());
				t.setValorPago(r.getDetalhes().get(percorreTitulo).getValorPago());
				t.setValorPercentualMulta(r.getDetalhes().get(percorreTitulo).getVlrPercMulta());
				t.setStatus(r.getDetalhes().get(percorreTitulo).getStatus());
				t.setParcela(r.getDetalhes().get(percorreTitulo).getParcela());
	//			t.setCabecalhoTitulo(cTitulo);
			
			}

			aRN.salvarAgencia(a);
			cRN.salvarConta(c);
			cartRN.salvarCarteira(cart);
			clRN.salvarCliente(cl);
			
			percorreTitulo++;
		
			tituloRN.salvarTitulo(t);
			
		}
		
		return t;
		
	}

}

